using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._Analysis
{
    /// <summary>
    /// <para>Make Route Layer</para>
    /// <para>Makes a route network analysis layer and sets its analysis properties. A route analysis layer is useful for determining the best route between a set of network locations based on a specified network cost.</para>
    /// <para>创建路径网络分析图层并设置其分析属性。路由分析图层可用于根据指定的网络开销确定一组网络位置之间的最佳路由。</para>
    /// </summary>    
    [DisplayName("Make Route Layer")]
    public class MakeRouteLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeRouteLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_network_dataset">
        /// <para>Input Analysis Network</para>
        /// <para>The network dataset on which the route analysis will be performed.</para>
        /// <para>将对其执行路径分析的网络数据集。</para>
        /// </param>
        /// <param name="_out_network_analysis_layer">
        /// <para>Output Layer Name</para>
        /// <para>Name of the route network analysis layer to create.</para>
        /// <para>要创建的路径网络分析图层的名称。</para>
        /// </param>
        /// <param name="_impedance_attribute">
        /// <para>Impedance Attribute</para>
        /// <para>The cost attribute to be used as impedance in the analysis.</para>
        /// <para>在分析中用作阻抗的成本属性。</para>
        /// </param>
        public MakeRouteLayer(object _in_network_dataset, object _out_network_analysis_layer, object _impedance_attribute)
        {
            this._in_network_dataset = _in_network_dataset;
            this._out_network_analysis_layer = _out_network_analysis_layer;
            this._impedance_attribute = _impedance_attribute;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Make Route Layer";

        public override string CallName => "na.MakeRouteLayer";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_network_dataset, _out_network_analysis_layer, _impedance_attribute, _find_best_order.GetGPValue(), _ordering_type.GetGPValue(), _time_windows.GetGPValue(), _accumulate_attribute_name, _UTurn_policy.GetGPValue(), _restriction_attribute_name, _hierarchy.GetGPValue(), _hierarchy_settings, _output_path_shape.GetGPValue(), _start_date_time, _output_layer];

        /// <summary>
        /// <para>Input Analysis Network</para>
        /// <para>The network dataset on which the route analysis will be performed.</para>
        /// <para>将对其执行路径分析的网络数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Analysis Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_network_dataset { get; set; }


        /// <summary>
        /// <para>Output Layer Name</para>
        /// <para>Name of the route network analysis layer to create.</para>
        /// <para>要创建的路径网络分析图层的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Layer Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_network_analysis_layer { get; set; }


        /// <summary>
        /// <para>Impedance Attribute</para>
        /// <para>The cost attribute to be used as impedance in the analysis.</para>
        /// <para>在分析中用作阻抗的成本属性。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Impedance Attribute")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _impedance_attribute { get; set; }


        /// <summary>
        /// <para>Reorder Stops to Find Optimal Route</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>Checked—The stops will be reordered to find the optimal route. This option changes the route analysis from a shortest-path problem to a traveling salesperson problem (TSP).</bullet_item><para/>
        ///     <bullet_item>Unchecked—The stops will be visited in the input order. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>选中—将对停靠点进行重新排序以找到最佳路径。此选项将路径分析从最短路径问题更改为旅行销售人员问题 （TSP）。</bullet_item><para/>
        ///     <bullet_item>未选中—将按输入顺序访问停靠点。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reorder Stops to Find Optimal Route")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _find_best_order_value _find_best_order { get; set; } = _find_best_order_value._false;

        public enum _find_best_order_value
        {
            /// <summary>
            /// <para>FIND_BEST_ORDER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("FIND_BEST_ORDER")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>USE_INPUT_ORDER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_INPUT_ORDER")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Preserve Ordering of Stops</para>
        /// <para><xdoc>
        ///   <para>Specifies the ordering of stops when Reorder stops to find optimal route parameter is checked.</para>
        ///   <bulletList>
        ///     <bullet_item>Preserve first and last stops—The first and last stops by input order will be preserved as the first and last stops in the route.</bullet_item><para/>
        ///     <bullet_item>Preserve first stop—The first stop by input order will be preserved as the first stop in the route, but the last stop can be reordered.</bullet_item><para/>
        ///     <bullet_item>Preserve last stop—The last stop by input order will be preserved as the last stop in the route, but the first stop can be reordered.</bullet_item><para/>
        ///     <bullet_item>Reorder all stops—The first and last stops will not be preserved and can be reordered.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定选中“重新排序停靠点以查找最佳路径”参数时停靠点的顺序。</para>
        ///   <bulletList>
        ///     <bullet_item>保留第一和最后一停靠点—按输入顺序排列的第一个和最后一个停靠点将保留为路径中的第一个和最后一个停靠点。</bullet_item><para/>
        ///     <bullet_item>保留第一个停靠点 - 按输入顺序排列的第一个停靠点将保留为路径中的第一个停靠点，但可以对最后一个停靠点进行重新排序。</bullet_item><para/>
        ///     <bullet_item>保留最后一站—按输入顺序排列的最后一站将保留为路径中的最后一站，但可以对第一站进行重新排序。</bullet_item><para/>
        ///     <bullet_item>对所有停靠点重新排序 - 不会保留第一个停靠点和最后一个停靠点，可以重新排序。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve Ordering of Stops")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ordering_type_value _ordering_type { get; set; } = _ordering_type_value._PRESERVE_BOTH;

        public enum _ordering_type_value
        {
            /// <summary>
            /// <para>Preserve first and last stops</para>
            /// <para>Preserve first and last stops—The first and last stops by input order will be preserved as the first and last stops in the route.</para>
            /// <para>保留第一和最后一停靠点—按输入顺序排列的第一个和最后一个停靠点将保留为路径中的第一个和最后一个停靠点。</para>
            /// </summary>
            [Description("Preserve first and last stops")]
            [GPEnumValue("PRESERVE_BOTH")]
            _PRESERVE_BOTH,

            /// <summary>
            /// <para>Reorder all stops</para>
            /// <para>Reorder all stops—The first and last stops will not be preserved and can be reordered.</para>
            /// <para>对所有停靠点重新排序 - 不会保留第一个停靠点和最后一个停靠点，可以重新排序。</para>
            /// </summary>
            [Description("Reorder all stops")]
            [GPEnumValue("PRESERVE_NONE")]
            _PRESERVE_NONE,

            /// <summary>
            /// <para>Preserve first stop</para>
            /// <para>Preserve first stop—The first stop by input order will be preserved as the first stop in the route, but the last stop can be reordered.</para>
            /// <para>保留第一个停靠点 - 按输入顺序排列的第一个停靠点将保留为路径中的第一个停靠点，但可以对最后一个停靠点进行重新排序。</para>
            /// </summary>
            [Description("Preserve first stop")]
            [GPEnumValue("PRESERVE_FIRST")]
            _PRESERVE_FIRST,

            /// <summary>
            /// <para>Preserve last stop</para>
            /// <para>Preserve last stop—The last stop by input order will be preserved as the last stop in the route, but the first stop can be reordered.</para>
            /// <para>保留最后一站—按输入顺序排列的最后一站将保留为路径中的最后一站，但可以对第一站进行重新排序。</para>
            /// </summary>
            [Description("Preserve last stop")]
            [GPEnumValue("PRESERVE_LAST")]
            _PRESERVE_LAST,

        }

        /// <summary>
        /// <para>Use Time Windows</para>
        /// <para><xdoc>
        ///   <para>Specifies whether time windows will be used at the stops.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The route will consider time windows on the stops. If a stop is arrived at before its time window, there will be wait time until the time window starts. If a stop is arrived at after its time window, there will be a time window violation. Total time window violation is balanced against adding impedance when computing the route. This option is enabled only when the impedance is in time units.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The route will ignore time windows on the stops. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否在停靠点使用时间窗。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—路径将考虑停靠点的时间窗口。如果在时间窗口之前到达停靠点，则在时间窗口开始之前将等待时间。如果在时间窗口之后到达停止，则将违反时间窗口。在计算路由时，总时间窗冲突与增加阻抗是相平衡的。仅当阻抗以时间单位表示时，才会启用此选项。</bullet_item><para/>
        ///     <bullet_item>未选中—路径将忽略停靠点上的时间窗口。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Time Windows")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_windows_value _time_windows { get; set; } = _time_windows_value._false;

        public enum _time_windows_value
        {
            /// <summary>
            /// <para>USE_TIMEWINDOWS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_TIMEWINDOWS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_TIMEWINDOWS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_TIMEWINDOWS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Accumulators</para>
        /// <para><xdoc>
        ///   <para>A list of cost attributes to be accumulated during analysis. These accumulation attributes are for reference only; the solver only uses the cost attribute specified by the Impedance Attribute parameter to calculate the route.</para>
        ///   <para>For each cost attribute that is accumulated, a Total_[Impedance] property is added to the routes that are output by the solver.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在分析期间要累积的成本属性列表。这些累积属性仅供参考;求解器仅使用阻抗属性参数指定的成本属性来计算路由。</para>
        ///   <para>对于累积的每个成本属性，都会将 Total_[Impedance] 属性添加到求解器输出的路径中。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Accumulators")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _accumulate_attribute_name { get; set; } = null;


        /// <summary>
        /// <para>U-Turn Policy</para>
        /// <para><xdoc>
        ///   <para>Specifies the U-turn policy that will be used at junctions. Allowing U-turns implies that the solver can turn around at a junction and double back on the same street. Given that junctions represent street intersections and dead ends, different vehicles may be able to turn around at some junctions but not at others—it depends on whether the junction represents an intersection or a dead end. To accommodate this, the U-turn policy parameter is implicitly specified by the number of edges that connect to the junction, which is known as junction valency. The acceptable values for this parameter are listed below; each is followed by a description of its meaning in terms of junction valency.</para>
        ///   <bulletList>
        ///     <bullet_item>Allowed—U-turns are permitted at junctions with any number of connected edges. This is the default value.</bullet_item><para/>
        ///     <bullet_item>Not allowed—U-turns are prohibited at all junctions, regardless of junction valency. However, U-turns are still permitted at network locations even when this setting is chosen, but you can set the individual network location's CurbApproach property to prohibit U-turns there as well.</bullet_item><para/>
        ///     <bullet_item>Allowed at dead ends only—U-turns are prohibited at all junctions, except those that have only one adjacent edge (a dead end).</bullet_item><para/>
        ///     <bullet_item>Allowed at dead ends and intersections only—U-turns are prohibited at junctions where exactly two adjacent edges meet but are permitted at intersections (junctions with three or more adjacent edges) and dead ends (junctions with exactly one adjacent edge). Often, networks have extraneous junctions in the middle of road segments. This option prevents vehicles from making U-turns at these locations.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>If you need a more precisely defined U-turn policy, consider adding a global turn delay evaluator to a network cost attribute or adjusting its settings if one exists, and pay particular attention to the configuration of reverse turns. You can also set the CurbApproach property of your network locations.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将在交汇点使用的 U 形转弯策略。允许掉头意味着求解器可以在交叉路口掉头，并在同一条街道上折返。鉴于交叉路口代表街道交叉路口和死胡同，不同的车辆可能在某些交叉路口掉头，但在其他交叉路口则不能掉头——这取决于交叉路口是代表交叉路口还是死胡同。为了适应这种情况，U 形转弯策略参数由连接到交汇点的边数隐式指定，这称为交汇点化合价。下面列出了此参数的可接受值;每个之后都描述了其在结化合价方面的含义。</para>
        ///   <bulletList>
        ///     <bullet_item>允许 - 允许在具有任意数量连接边的交汇处进行 U 形转弯。这是默认值。</bullet_item><para/>
        ///     <bullet_item>不允许 - 无论交汇点化合价如何，所有交汇点都禁止掉头。但是，即使选择此设置，仍允许在网络位置掉头，但您可以设置单个网络位置的 CurbApproach 属性以禁止掉头。</bullet_item><para/>
        ///     <bullet_item>仅允许在死胡同处 - 所有交汇点都禁止掉头，但只有一个相邻边（死胡同）的交汇点除外。</bullet_item><para/>
        ///     <bullet_item>仅允许在死角和交叉点处 - 在两条相邻边恰好相交的交汇处禁止掉头，但在交叉点（具有三个或更多相邻边的交汇点）和死端（恰好具有一条相邻边的交汇点）允许掉头。通常，网络在路段中间有无关的交叉路口。此选项可防止车辆在这些位置掉头。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果需要更精确地定义掉头策略，请考虑将全局转弯延迟评估器添加到网络成本属性或调整其设置（如果存在），并特别注意倒车转弯的配置。还可以设置网络位置的 CurbApproach 属性。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("U-Turn Policy")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _UTurn_policy_value _UTurn_policy { get; set; } = _UTurn_policy_value._ALLOW_UTURNS;

        public enum _UTurn_policy_value
        {
            /// <summary>
            /// <para>Allowed</para>
            /// <para>Allowed—U-turns are permitted at junctions with any number of connected edges. This is the default value.</para>
            /// <para>允许 - 允许在具有任意数量连接边的交汇处进行 U 形转弯。这是默认值。</para>
            /// </summary>
            [Description("Allowed")]
            [GPEnumValue("ALLOW_UTURNS")]
            _ALLOW_UTURNS,

            /// <summary>
            /// <para>Not allowed</para>
            /// <para>Not allowed—U-turns are prohibited at all junctions, regardless of junction valency. However, U-turns are still permitted at network locations even when this setting is chosen, but you can set the individual network location's CurbApproach property to prohibit U-turns there as well.</para>
            /// <para>不允许 - 无论交汇点化合价如何，所有交汇点都禁止掉头。但是，即使选择此设置，仍允许在网络位置掉头，但您可以设置单个网络位置的 CurbApproach 属性以禁止掉头。</para>
            /// </summary>
            [Description("Not allowed")]
            [GPEnumValue("NO_UTURNS")]
            _NO_UTURNS,

            /// <summary>
            /// <para>Allowed at dead ends only</para>
            /// <para>Allowed at dead ends only—U-turns are prohibited at all junctions, except those that have only one adjacent edge (a dead end).</para>
            /// <para>仅允许在死胡同处 - 所有交汇点都禁止掉头，但只有一个相邻边（死胡同）的交汇点除外。</para>
            /// </summary>
            [Description("Allowed at dead ends only")]
            [GPEnumValue("ALLOW_DEAD_ENDS_ONLY")]
            _ALLOW_DEAD_ENDS_ONLY,

            /// <summary>
            /// <para>Allowed at dead ends and intersections only</para>
            /// <para>Allowed at dead ends and intersections only—U-turns are prohibited at junctions where exactly two adjacent edges meet but are permitted at intersections (junctions with three or more adjacent edges) and dead ends (junctions with exactly one adjacent edge). Often, networks have extraneous junctions in the middle of road segments. This option prevents vehicles from making U-turns at these locations.</para>
            /// <para>仅允许在死角和交叉点处 - 在两条相邻边恰好相交的交汇处禁止掉头，但在交叉点（具有三个或更多相邻边的交汇点）和死端（恰好具有一条相邻边的交汇点）允许掉头。通常，网络在路段中间有无关的交叉路口。此选项可防止车辆在这些位置掉头。</para>
            /// </summary>
            [Description("Allowed at dead ends and intersections only")]
            [GPEnumValue("ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY")]
            _ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY,

        }

        /// <summary>
        /// <para>Restrictions</para>
        /// <para>A list of restriction attributes to be applied during the analysis.</para>
        /// <para>在分析期间要应用的限制属性列表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Restrictions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _restriction_attribute_name { get; set; } = null;


        /// <summary>
        /// <para>Use Hierarchy in Analysis</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>Checked—The hierarchy attribute will be used for the analysis. Using a hierarchy results in the solver preferring higher-order edges to lower-order edges. Hierarchical solves are faster, and they can be used to simulate the preference of a driver who chooses to travel on freeways rather than local roads when possible—even if that means a longer trip. This option is active only if the input network dataset has a hierarchy attribute.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The hierarchy attribute will not be used for the analysis. If hierarchy is not used, the result is an exact route for the network dataset.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>The parameter is inactive if a hierarchy attribute is not defined on the network dataset used to perform the analysis.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>选中 - 层次结构属性将用于分析。使用层次结构会导致求解器优先选择高阶边而不是低阶边。分层求解速度更快，并且可用于模拟驾驶员的偏好，如果可能的话，他们选择在高速公路上行驶而不是在本地道路上行驶，即使这意味着更长的行程。仅当输入网络数据集具有层次结构属性时，此选项才处于活动状态。</bullet_item><para/>
        ///     <bullet_item>未选中 - 等级属性将不用于分析。如果未使用层次结构，则结果是网络数据集的精确路径。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果未在用于执行分析的网络数据集上定义层次结构属性，则该参数处于非活动状态。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Hierarchy in Analysis")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _hierarchy_value? _hierarchy { get; set; } = null;

        public enum _hierarchy_value
        {
            /// <summary>
            /// <para>USE_HIERARCHY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_HIERARCHY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_HIERARCHY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_HIERARCHY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Hierarchy Rank Settings</para>
        /// <para>Prior to version 10, this parameter allowed you to change the hierarchy ranges for your analysis from the default hierarchy ranges established in the network dataset. At version 10, this parameter is no longer supported. To change the hierarchy ranges for your analysis, update the default hierarchy ranges in the network dataset.</para>
        /// <para>在版本 10 之前，此参数允许您从网络数据集中建立的默认层次结构范围更改分析的层次结构范围。在版本 10 中，不再支持此参数。要更改分析的层次结构范围，请更新网络数据集中的默认层次结构范围。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Hierarchy Rank Settings")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _hierarchy_settings { get; set; } = null;


        /// <summary>
        /// <para>Output Path Shape</para>
        /// <para><xdoc>
        ///   <para>Specifies the shape type for the route features that are output by the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>True lines with measures—The output routes will have the exact shape of the underlying network sources. The output includes route measurements for linear referencing. The measurements increase from the first stop and record the cumulative impedance to reach a given position.</bullet_item><para/>
        ///     <bullet_item>True lines without measures—The output routes will have the exact shape of the underlying network sources.</bullet_item><para/>
        ///     <bullet_item>Straight lines—The output route shape will be a single straight line between the stops.</bullet_item><para/>
        ///     <bullet_item>No lines—No shape will be generated for the output routes.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>No matter which output shape type is chosen, the best route is always determined by the network impedance, never Euclidean distance. This means that only the route shapes are different, not the underlying traversal of the network.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析输出的路径要素的形状类型。</para>
        ///   <bulletList>
        ///     <bullet_item>带度量值的真线 - 输出路由将具有基础网络源的确切形状。输出包括用于线性参考的路径测量值。测量值从第一站开始增加，并记录累积阻抗以达到给定位置。</bullet_item><para/>
        ///     <bullet_item>无测量值的真线 - 输出路径将具有基础网络源的确切形状。</bullet_item><para/>
        ///     <bullet_item>直线—输出路径形状将为停靠点之间的一条直线。</bullet_item><para/>
        ///     <bullet_item>无线 - 不会为输出路径生成任何形状。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>无论选择哪种输出形状类型，最佳路由始终由网络阻抗决定，而不是欧几里得距离。这意味着只有路由形状不同，而网络的基础遍历不同。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Path Shape")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _output_path_shape_value _output_path_shape { get; set; } = _output_path_shape_value._TRUE_LINES_WITH_MEASURES;

        public enum _output_path_shape_value
        {
            /// <summary>
            /// <para>No lines</para>
            /// <para>No lines—No shape will be generated for the output routes.</para>
            /// <para>无线 - 不会为输出路径生成任何形状。</para>
            /// </summary>
            [Description("No lines")]
            [GPEnumValue("NO_LINES")]
            _NO_LINES,

            /// <summary>
            /// <para>Straight lines</para>
            /// <para>Straight lines—The output route shape will be a single straight line between the stops.</para>
            /// <para>直线—输出路径形状将为停靠点之间的一条直线。</para>
            /// </summary>
            [Description("Straight lines")]
            [GPEnumValue("STRAIGHT_LINES")]
            _STRAIGHT_LINES,

            /// <summary>
            /// <para>True lines with measures</para>
            /// <para>True lines with measures—The output routes will have the exact shape of the underlying network sources. The output includes route measurements for linear referencing. The measurements increase from the first stop and record the cumulative impedance to reach a given position.</para>
            /// <para>带度量值的真线 - 输出路由将具有基础网络源的确切形状。输出包括用于线性参考的路径测量值。测量值从第一站开始增加，并记录累积阻抗以达到给定位置。</para>
            /// </summary>
            [Description("True lines with measures")]
            [GPEnumValue("TRUE_LINES_WITH_MEASURES")]
            _TRUE_LINES_WITH_MEASURES,

            /// <summary>
            /// <para>True lines without measures</para>
            /// <para>True lines without measures—The output routes will have the exact shape of the underlying network sources.</para>
            /// <para>无测量值的真线 - 输出路径将具有基础网络源的确切形状。</para>
            /// </summary>
            [Description("True lines without measures")]
            [GPEnumValue("TRUE_LINES_WITHOUT_MEASURES")]
            _TRUE_LINES_WITHOUT_MEASURES,

        }

        /// <summary>
        /// <para>Start Time</para>
        /// <para><xdoc>
        ///   <para>The start date and time for the route. Route start time is typically used to find routes based on the impedance attribute that varies with the time of the day. For example, a start time of 7:00 a.m. could be used to find a route that considers rush hour traffic. The default value for this parameter is 8:00 a.m. A date and time can be specified as 10/21/05 10:30 AM. If the route spans multiple days and only the start time is specified, the current date is used.</para>
        ///   <para>Instead of using a particular date, a day of the week can be specified using the following dates:
        ///   <bulletList>
        ///     <bullet_item>Today—12/30/1899  </bullet_item><para/>
        ///     <bullet_item>Sunday—12/31/1899  </bullet_item><para/>
        ///     <bullet_item>Monday—1/1/1900  </bullet_item><para/>
        ///     <bullet_item>Tuesday—1/2/1900  </bullet_item><para/>
        ///     <bullet_item>Wednesday—1/3/1900  </bullet_item><para/>
        ///     <bullet_item>Thursday—1/4/1900  </bullet_item><para/>
        ///     <bullet_item>Friday—1/5/1900  </bullet_item><para/>
        ///     <bullet_item>Saturday—1/6/1900  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>For example, to specify that travel should begin at 5:00 p.m. on Tuesday, specify the parameter value as 1/2/1900 5:00 PM.</para>
        ///   <para>After the solve, the start and end times of the route are populated in the output routes. These start and end times are also used when directions are generated.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>路线的开始日期和时间。路由开始时间通常用于根据随一天中的时间变化的阻抗属性来查找路由。例如，上午 7：00 的开始时间可用于查找考虑高峰时段交通的路径。此参数的默认值为上午 8：00。日期和时间可以指定为 10/21/05 上午 10：30。如果路径跨越多天且仅指定了开始时间，则使用当前日期。</para>
        /// 可以使用<para>以下日期指定星期几，而不是使用特定日期：
        ///   <bulletList>
        ///     <bullet_item>今天 - 1899 年 12 月 30 日</bullet_item><para/>
        ///     <bullet_item>星期日—1899年12月31日</bullet_item><para/>
        ///     <bullet_item>星期一 - 1/1/1900</bullet_item><para/>
        ///     <bullet_item>星期二 - 1/2/1900</bullet_item><para/>
        ///     <bullet_item>星期三 - 1/3/1900</bullet_item><para/>
        ///     <bullet_item>星期四—1/4/1900</bullet_item><para/>
        ///     <bullet_item>星期五 - 1/5/1900</bullet_item><para/>
        ///     <bullet_item>星期六 - 1/6/1900</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>例如，若要指定旅行应从星期二下午 5：00 开始，请将参数值指定为 1/2/1900 下午 5：00。</para>
        ///   <para>求解后，路由的开始和结束时间将填充到输出路由中。生成方向时也会使用这些开始和结束时间。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Start Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _start_date_time { get; set; } = null;


        /// <summary>
        /// <para>Network Analyst Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Analyst Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_layer { get; set; }


        public MakeRouteLayer SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}